<!DOCTYPE html>
<html lang="en">
  <head>
    <meta charset="UTF-8" />
    <meta name="viewport" content="width=device-width, initial-scale=1.0" />

    <title>02-闭包</title>
  </head>
  <body>
    <script>
      // 1. 闭包：内层函数 + 外层函数变量
      //   function outer() {
      //     const a = 1
      //     function f() {
      //       console.log(a) // 1
      //     }
      //     f()
      //   }
      //   outer()

      // 2. 闭包的应用： 实现数据的私有。统计函数的调用次数
      //   let count = 1
      //   function fn() {
      //     count++
      //     console.log(`函数被调用${count}次`)
      //   }
      //   fn() // 2
      //   fn() // 3

      // 3. 闭包的写法  统计函数的调用次数
      function fn() {
        let count = 1
        function fun() {
          count++
          console.log(`函数被调用${count}次`)
        }
        return fun
      }
      const result = fn()
      result() // 2
      result() // 3
      // const fn = function() { }  函数表达式
      // 4. 闭包存在的问题： 可能会造成内存泄漏
    </script>
  </body>
</html>
